import { getSavedFingerprint } from "./fingerprint";
import { DeviceType } from "../enum";

/**
 * @author BelovedLYC
 * @date 2025-05-31
 * @description 获取设备信息
 * @returns 设备名称字符串，格式为"浏览器 on 操作系统"
 */
export function getDeviceName(): string {
  const ua = navigator.userAgent;
  let browserName = "Unknown Browser";
  let osName = "Unknown OS";

  // 检测浏览器
  if (ua.indexOf("Edg") > -1) browserName = "Edge";
  else if (ua.indexOf("Chrome") > -1) browserName = "Chrome";
  else if (ua.indexOf("Safari") > -1) browserName = "Safari";
  else if (ua.indexOf("Firefox") > -1) browserName = "Firefox";
  else if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident/") > -1)
    browserName = "IE";

  // 检测操作系统
  if (ua.indexOf("Windows") > -1) osName = "Windows";
  else if (ua.indexOf("Mac") > -1) osName = "MacOS";
  else if (ua.indexOf("Android") > -1) osName = "Android";
  else if (ua.indexOf("iPhone") > -1) osName = "iPhone";
  else if (ua.indexOf("iPad") > -1) osName = "iPad";
  else if (ua.indexOf("Linux") > -1) osName = "Linux";

  return `${browserName} on ${osName}`;
}

/**
 * 获取当前设备类型
 * @returns 设备类型枚举值
 */
export function getDeviceType(): DeviceType {
  const ua = navigator.userAgent;

  if (/Android/i.test(ua)) {
    return DeviceType.PHONE;
  }

  if (/iPhone|iPad|iPod/i.test(ua)) {
    return /iPad/i.test(ua) ? DeviceType.TABLET : DeviceType.PHONE;
  }

  if (
    /Windows NT|Mac OS X|Linux/i.test(ua) &&
    !/Mobile|Android|iPhone|iPad|iPod/i.test(ua)
  ) {
    return DeviceType.DESKTOP;
  }

  return DeviceType.WEB;
}

/**
 * 获取设备ID
 * 使用指纹作为设备ID，如果没有则生成一个随机ID并存储
 * @returns 设备ID字符串
 */
export function getDeviceId(): string {
  const fingerprintId = getSavedFingerprint();

  // 如果已有指纹ID，则直接使用
  if (fingerprintId) {
    return fingerprintId;
  }

  // 如果没有指纹ID（这种情况应该很少见，因为我们在应用启动时就获取了指纹）
  // 生成一个随机ID作为备用
  const randomId = `device_${Date.now()}_${Math.random()
    .toString(36)
    .substring(2, 10)}`;

  console.warn("未找到指纹ID，使用随机ID作为备用:", randomId);

  return randomId;
}
